import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import { join } from 'path'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import AutoImport from 'unplugin-auto-import/vite'
import eslintPlugin from 'vite-plugin-eslint'

export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd())
  return {
    base: env.VITE_BASE_PATH,
    plugins: [
      vue(),
      eslintPlugin({
        include: ['src/**/*.ts', 'src/**/*.js', 'src/**/*.vue', 'src/*.ts', 'src/*.js', 'src/*.vue']
      }),
      AutoImport({
        imports: ['vue', 'vue-router'],
        eslintrc: {
          enabled: false, // 默认false, true启用。生成一次就可以，避免每次工程启动都生成
          filepath: './.eslintrc-auto-import.json', // 生成json文件
          globalsPropValue: true
        }
      }),
      Components({
        dirs: ['src/components'],
        resolvers: [ElementPlusResolver()],
        // 组件的有效文件扩展名。
        extensions: ['vue'],
        // 允许子目录作为组件的命名空间前缀。
        directoryAsNamespace: false,
        deep: true
      })
    ],
    server: {
      host: '0.0.0.0', //ip地址
      port: Number(env.VITE_APP_PORT), // 设置服务启动端口号
      proxy: {
        '/api': {
          target: env.VITE_BASE_URL, //实际请求地址
          changeOrigin: true,
          rewrite: path => path.replace(/^\/api/, '')
        }
      }
    },
    build: {
      target: 'esnext',
      minify: 'terser',
      terserOptions: {
        compress: {
          drop_console: true, // 生产环境去掉控制台 console
          drop_debugger: true, // 生产环境去掉控制台 debugger 默认就是true
          dead_code: true // 删除无法访问的代码 默认就是true
        }
      },
      chunkSizeWarningLimit: 2000 // 调整区块大小警告限制
    },
    resolve: {
      alias: {
        '@': join(__dirname, './src')
      }
    }
  }
})
